home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / term-source.lha / PrintPanel.c < prev    next >
C/C++ Source or Header  |  1995-09-28  |  7KB  |  303 lines

  1. /*
  2. **    PrintPanel.c
  3. **
  4. **    Control panel to set options for phonebook printing
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_FILE=1, GAD_PLAIN, GAD_USE, GAD_CANCEL, GAD_OPTION };
  13.  
  14. STATIC UBYTE __far    OutputFile[MAX_FILENAME_LENGTH] = "PRT:";
  15. STATIC ULONG        Flags = PRINT_SERIAL | PRINT_MODEM | PRINT_SCREEN | PRINT_TERMINAL | PRINT_USERNAME | PRINT_COMMENT;
  16. STATIC BYTE        Plain = FALSE;
  17.  
  18. VOID __regargs
  19. PrintPanel(struct Window *Window,struct List *PhoneList,LONG Count)
  20. {
  21.     struct LayoutHandle    *Handle;
  22.     BYTE             Result = FALSE;
  23.  
  24.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  25.         LH_LocaleHook,    &LocaleHook,
  26.     TAG_DONE))
  27.     {
  28.         struct Window    *PanelWindow;
  29.         UBYTE         Storage[6];
  30.  
  31.         LT_New(Handle,
  32.             LA_Type,    VERTICAL_KIND,
  33.         TAG_DONE);
  34.         {
  35.             LT_New(Handle,
  36.                 LA_Type,    HORIZONTAL_KIND,
  37.                 LA_LabelID,    MSG_V36_0152,
  38.             TAG_DONE);
  39.             {
  40.                 LT_New(Handle,
  41.                     LA_Type,    VERTICAL_KIND,
  42.                 TAG_DONE);
  43.                 {
  44.                     LONG i;
  45.  
  46.                     for(i = 0 ; i < 6 ; i++)
  47.                     {
  48.                         if(i == 3)
  49.                         {
  50.                             LT_EndGroup(Handle);
  51.  
  52.                             LT_New(Handle,
  53.                                 LA_Type,VERTICAL_KIND,
  54.                             TAG_DONE);
  55.                         }
  56.  
  57.                         if(Flags & (1L << i))
  58.                             Storage[i] = TRUE;
  59.                         else
  60.                             Storage[i] = FALSE;
  61.  
  62.                         LT_New(Handle,
  63.                             LA_Type,    CHECKBOX_KIND,
  64.                             LA_LabelID,    MSG_PRINTPANEL_INCLUDE_SERIAL_GAD + i,
  65.                             LA_ID,        GAD_OPTION + i,
  66.                             LA_BYTE,    &Storage[i],
  67.                         TAG_DONE);
  68.                     }
  69.  
  70.                     LT_EndGroup(Handle);
  71.                 }
  72.  
  73.                 LT_EndGroup(Handle);
  74.             }
  75.  
  76.             LT_New(Handle,
  77.                 LA_Type,    VERTICAL_KIND,
  78.                 LA_LabelID,    MSG_V36_0153,
  79.             TAG_DONE);
  80.             {
  81.                 LT_New(Handle,
  82.                     LA_Type,    STRING_KIND,
  83.                     LA_LabelID,    MSG_PRINTPANEL_OUTPUT_FILE_OR_DEVICE_GAD,
  84.                     LA_ID,        GAD_FILE,
  85.                     LA_STRPTR,    OutputFile,
  86.                     LA_Chars,    30,
  87.                     LAST_Picker,    TRUE,
  88.                     GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  89.                 TAG_DONE);
  90.  
  91.                 LT_New(Handle,
  92.                     LA_Type,    CHECKBOX_KIND,
  93.                     LA_LabelID,    MSG_PRINTPANEL_PLAIN_TEXT_GAD,
  94.                     LA_ID,        GAD_PLAIN,
  95.                     LA_BYTE,    &Plain,
  96.                 TAG_DONE);
  97.  
  98.                 LT_EndGroup(Handle);
  99.             }
  100.  
  101.             LT_New(Handle,
  102.                 LA_Type,VERTICAL_KIND,
  103.             TAG_DONE);
  104.             {
  105.                 LT_New(Handle,
  106.                     LA_Type,    XBAR_KIND,
  107.                     LAXB_FullSize,    TRUE,
  108.                 TAG_DONE);
  109.  
  110.                 LT_EndGroup(Handle);
  111.             }
  112.  
  113.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  114.                 LAGR_SameSize,    TRUE,
  115.                 LAGR_Spread,    TRUE,
  116.             TAG_DONE);
  117.             {
  118.                 LT_New(Handle,
  119.                     LA_Type,    BUTTON_KIND,
  120.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  121.                     LA_ID,        GAD_USE,
  122.                     LABT_ReturnKey,    TRUE,
  123.                     LABT_ExtraFat,    TRUE,
  124.                 TAG_DONE);
  125.  
  126.                 LT_New(Handle,
  127.                     LA_Type,    BUTTON_KIND,
  128.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  129.                     LA_ID,        GAD_CANCEL,
  130.                     LABT_EscKey,    TRUE,
  131.                     LABT_ExtraFat,    TRUE,
  132.                 TAG_DONE);
  133.  
  134.                 LT_EndGroup(Handle);
  135.             }
  136.  
  137.             LT_EndGroup(Handle);
  138.         }
  139.  
  140.         if(PanelWindow = LT_Build(Handle,
  141.             LAWN_TitleID,        MSG_PRINTPANEL_OUTPUT_OPTIONS_TXT,
  142.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  143.             LAWN_HelpHook,        &GuideHook,
  144.             LAWN_Parent,        Window,
  145.             WA_DepthGadget,        TRUE,
  146.             WA_CloseGadget,        TRUE,
  147.             WA_DragBar,        TRUE,
  148.             WA_RMBTrap,        TRUE,
  149.             WA_Activate,        TRUE,
  150.             WA_SimpleRefresh,    TRUE,
  151.         TAG_DONE))
  152.         {
  153.             struct IntuiMessage    *Message;
  154.             BOOLEAN             Done = FALSE;
  155.             ULONG             MsgClass;
  156.             struct Gadget        *MsgGadget;
  157.  
  158.             GuideContext(CONTEXT_PRINT);
  159.  
  160.             PushWindow(PanelWindow);
  161.  
  162.             do
  163.             {
  164.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  165.                     break;
  166.  
  167.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  168.                 {
  169.                     MsgClass    = Message -> Class;
  170.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  171.  
  172.                     LT_ReplyIMsg(Message);
  173.  
  174.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  175.                         Done = TRUE;
  176.  
  177.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadget -> GadgetID == GAD_FILE)
  178.                     {
  179.                         UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  180.                                     *DummyChar;
  181.                         struct FileRequester    *FileRequest;
  182.  
  183.                         SplitFileName(OutputFile,&DummyChar,DummyBuffer);
  184.  
  185.                         if(!DummyChar[0])
  186.                         {
  187.                             DummyBuffer[0] = 0;
  188.  
  189.                             DummyChar = LocaleString(MSG_PRINTPANEL_FILENAME_TXT);
  190.                         }
  191.  
  192.                         if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_PRINTPANEL_SELECT_OUTPUT_FILE_TXT),DummyBuffer,DummyChar,DummyBuffer,NULL,FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  193.                         {
  194.                             LT_SetAttributes(Handle,GAD_FILE,
  195.                                 GTST_String,DummyBuffer,
  196.                             TAG_DONE);
  197.  
  198.                             FreeAslRequest(FileRequest);
  199.                         }
  200.                     }
  201.  
  202.                     if(MsgClass == IDCMP_GADGETUP)
  203.                     {
  204.                         LONG i;
  205.  
  206.                         switch(MsgGadget -> GadgetID)
  207.                         {
  208.                             case GAD_USE:
  209.  
  210.                                 LT_UpdateStrings(Handle);
  211.  
  212.                                 Flags = NULL;
  213.  
  214.                                 for(i = 0 ; i < 6 ; i++)
  215.                                 {
  216.                                     if(Storage[i])
  217.                                         Flags |= (1L << i);
  218.                                 }
  219.  
  220.                                 Result = Done = TRUE;
  221.                                 break;
  222.  
  223.                             case GAD_CANCEL:
  224.  
  225.                                 Done = TRUE;
  226.                                 break;
  227.                         }
  228.                     }
  229.                 }
  230.             }
  231.             while(!Done);
  232.  
  233.             PopWindow();
  234.         }
  235.  
  236.         LT_DeleteHandle(Handle);
  237.     }
  238.  
  239.     if(Result)
  240.     {
  241.         LONG Error = 0;
  242.         BPTR File;
  243.  
  244.         if(File = Open(OutputFile,MODE_NEWFILE))
  245.         {
  246.             struct Window        *ReqWindow;
  247.             struct EasyStruct     Easy;
  248.  
  249.             Easy . es_StructSize    = sizeof(struct EasyStruct);
  250.             Easy . es_Flags        = NULL;
  251.             Easy . es_Title        = (UBYTE *)LocaleString(MSG_TERMAUX_TERM_REQUEST_TXT);
  252.             Easy . es_GadgetFormat    = (UBYTE *)LocaleString(MSG_PRINT_STOP_TXT);
  253.             Easy . es_TextFormat    = (UBYTE *)LocaleString(MSG_PRINT_PRINTING_PHONEBOOK_TXT);
  254.  
  255.             if(ReqWindow = BuildEasyRequest(Window,&Easy,NULL))
  256.             {
  257.                 struct PhoneNode    *TempNode;
  258.                 BYTE             Continue = TRUE;
  259.  
  260.                 if(Count > 0)
  261.                 {
  262.                     for(TempNode = (struct PhoneNode *)PhoneList -> lh_Head ; Continue && TempNode -> VanillaNode . ln_Succ ; TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ)
  263.                     {
  264.                         if(TempNode -> Entry -> Count >= 0)
  265.                             Continue = PrintEntry(File,ReqWindow,Plain,&Error,TempNode -> Entry,Flags);
  266.                     }
  267.                 }
  268.                 else
  269.                 {
  270.                     for(TempNode = (struct PhoneNode *)PhoneList -> lh_Head ; Continue && TempNode -> VanillaNode . ln_Succ ; TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ)
  271.                         Continue = PrintEntry(File,ReqWindow,Plain,&Error,TempNode -> Entry,Flags);
  272.                 }
  273.  
  274.                 FreeSysRequest(ReqWindow);
  275.             }
  276.  
  277.             Close(File);
  278.  
  279.             if(PathPart(OutputFile) != OutputFile)
  280.             {
  281.                 AddProtection(OutputFile,FIBF_EXECUTE);
  282.  
  283.                 if(Config -> MiscConfig -> CreateIcons)
  284.                     AddIcon(OutputFile,FILETYPE_TEXT,TRUE);
  285.             }
  286.         }
  287.         else
  288.             Error = IoErr();
  289.  
  290.         if(Error)
  291.         {
  292.             STRPTR ErrorString;
  293.  
  294.             if(Fault(Error,"",SharedBuffer,MAX_FILENAME_LENGTH))
  295.                 ErrorString = SharedBuffer;
  296.             else
  297.                 ErrorString = "???";
  298.  
  299.             MyEasyRequest(Window,LocaleString(MSG_PRINT_ERROR_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),Error,ErrorString);
  300.         }
  301.     }
  302. }
  303.